type Zip<T, U, R extends any[] = []> = T extends [infer F, ...infer L]
  ? U extends [infer F2, ...infer L2]
    ? Zip<L, L2, [...R, [F, F2]]>
    : R
  : R;

type Result5 = Zip<[1, 2], [true, false]>;
